package pe.com.bbva.modpre.dominio;

import java.math.BigDecimal;

import javax.persistence.*;
import javax.validation.constraints.NotNull;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

import pe.com.bbva.modpre.dominio.util.AuditoriaBean;
import pe.com.bbva.modpre.utileria.Constante;

/**
 * The persistent class for the CFG_VALOR database table.
 * 
 */
@Entity
@Table(name="CFG_VALOR")
@SuppressWarnings("serial")
public class Valor extends AuditoriaBean {

	@Id
	@Column(unique=true, nullable=false, precision=16)
	@GeneratedValue(strategy = GenerationType.TABLE, generator = "SEQ_VALOR")
	@TableGenerator(name = "SEQ_VALOR", table = "SEQ_ENTIDAD", pkColumnName = "ENTIDAD", initialValue = 1,
	valueColumnName = "ULTIMO_ID", pkColumnValue = "pe.com.bbva.modpre.dominio.Valor", allocationSize = 1)
	private Long id;

	@Column(length=20)
	@NotNull(message=Constante.CODIGO_MENSAJE.VALIDAR_TEXTBOX)
	private String codigo;
	
	@Column(name="NUMERO_AUX1")
	private BigDecimal aux1;
	
	@Column(name="NUMERO_AUX2")
	private BigDecimal aux2;
	
	@Column(name="NUMERO_AUX3")
	private BigDecimal aux3;
	
	@Column(name="NUMERO_AUX4")
	private BigDecimal aux4;

	@Column(length=250)
	private String descripcion;

	@Column(length=1)
	@NotNull(message=Constante.CODIGO_MENSAJE.VALIDAR_COMBOBOX)
	private String estado;

	@Column(length=50)
	@NotNull(message=Constante.CODIGO_MENSAJE.VALIDAR_TEXTBOX)
	private String nombre;

	@Column(precision=8)
	@NotNull(message=Constante.CODIGO_MENSAJE.VALIDAR_TEXTBOX)
	private Integer orden;

	//uni-directional many-to-one association to Lista
	@ManyToOne
	@JoinColumn(name="LISTA")
	@NotNull(message=Constante.CODIGO_MENSAJE.VALIDAR_COMBOBOX)
	private Lista lista;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getCodigo() {
		return this.codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getDescripcion() {
		return this.descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public String getEstado() {
		return this.estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Integer getOrden() {
		return orden;
	}

	public void setOrden(Integer orden) {
		this.orden = orden;
	}

	public Lista getLista() {
		return this.lista;
	}

	public void setLista(Lista lista) {
		this.lista = lista;
	}

	public BigDecimal getAux1() {
		return aux1;
	}

	public void setAux1(BigDecimal aux1) {
		this.aux1 = aux1;
	}

	public BigDecimal getAux2() {
		return aux2;
	}

	public void setAux2(BigDecimal aux2) {
		this.aux2 = aux2;
	}

	public BigDecimal getAux3() {
		return aux3;
	}

	public void setAux3(BigDecimal aux3) {
		this.aux3 = aux3;
	}

	public BigDecimal getAux4() {
		return aux4;
	}

	public void setAux4(BigDecimal aux4) {
		this.aux4 = aux4;
	}

	public static abstract class CODIGO
	{
		public final static String DNI = "L";
		public final static String RUC = "R";
		public final static String COD_CEN = "COD_CEN";
		public final static String ACTIVO = "A";
		public final static String INACTIVO = "I";
		public final static String REGISTRO = "REG";
		public final static String MIS_SOL = "MIS_SOL";
		public final static String SOL_EQU = "SOL_EQU";
		public final static String MIS_SOL_SUB_EQU = "MIS_SOL_SUB_EQU";
		public final static String SOL_EQU_SUB_EQU = "SOL_EQU_SUB_EQU";
		public final static String BEC = "BEC";
		public final static String CONSUMO = "CONSUMO";
		public final static String HIPOTECA = "HIPOTECA";
		public final static String PEN = "PEN";
		public final static String USD = "USD";
		public final static String BEC_CARGA = "BEC";
		public final static String CONSUMO_CARGA = "CONSUMO";
		public final static String HIPOTECARIO_CARGA = "HIPOTECARIO";
	}
	
	@Override
	public int hashCode() {
		HashCodeBuilder hashCodeBuilder = new HashCodeBuilder(3, 7);
		hashCodeBuilder.append(codigo);
		if(lista != null)
		{
			hashCodeBuilder.append(lista.getCodigo());
		}
		return hashCodeBuilder.toHashCode();
	}

	@Override
	public boolean equals(Object obj) {
		boolean equals = false;
		if (obj instanceof Valor) {
			Valor bean = (Valor) obj;
			EqualsBuilder equalsBuilder = new EqualsBuilder();
			equalsBuilder.append(codigo, bean.codigo);
			if(lista != null && bean.lista != null)
			{
				equalsBuilder.append(lista.getCodigo(), bean.lista.getCodigo());
			}
			equals = equalsBuilder.isEquals();
		}
		return equals;
	}
	
		
}